package modelo;

import excepciones.TableroIndiceFueraDeRangoExcepcion;
import modelo.Posicion;

public class Tablero {
	private Posicion[][] posiciones;
	private int cantidadDeFilas;
	private int cantidadDeColumnas;
	
	private void crearTablero() {
		this.posiciones = new Posicion[cantidadDeFilas][cantidadDeColumnas];
		
		for (int i = 0; i < cantidadDeFilas; i++) {
			for (int j = 0; j < cantidadDeColumnas; j++) {
				this.posiciones[i][j] = new Posicion(i, j);
			}
		}
	}
	
	public int getCantidadDeFilas() {
		return cantidadDeFilas;
	}
	
	public int getCantidadDeColumnas() {
		return cantidadDeColumnas;
	}
	
	public boolean posicionValida(int fila, int columna) {
		return (fila < cantidadDeFilas && fila >= 0) && (columna < cantidadDeColumnas && columna >= 0);
	}
	
	public Tablero() {
		this.cantidadDeFilas = 10;
		this.cantidadDeColumnas = 10;
		
		crearTablero();
	}
	
	public Tablero(int cantidadDeFilas, int cantidadDeColumnas) throws TableroIndiceFueraDeRangoExcepcion {
		if (cantidadDeFilas <= 0 || cantidadDeColumnas <= 0) {
			throw new TableroIndiceFueraDeRangoExcepcion("ERROR: tamaño inválido.");
		}
		
		this.cantidadDeFilas = cantidadDeFilas;
		this.cantidadDeColumnas = cantidadDeColumnas;
		
		crearTablero();
	}
	
	public Posicion getPosicion(int fila, int columna) throws TableroIndiceFueraDeRangoExcepcion {
		if (posicionValida(fila, columna)) {
			return posiciones[fila][columna];
		}
		throw new TableroIndiceFueraDeRangoExcepcion("ERROR: posición inválida.");
	}
}